package com.proyecto.core.Utilidades;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import com.proyecto.core.modelo.echo.constantes.ParametrosIniciales;

public class FileWrapper {

		static final public String TIPO_ARCHIVO_TEXTO = "text/plain";
		
	    private String name;

	    private String type;

	    private String path;

		public void copiarArchivoAtributos(File archivo, String tipoArchivo) {
			this.copiarAtributos(archivo, tipoArchivo);
		}
		/*
		public void copiarArchivoAtributosSrv(File archivo, String tipoArchivo) {
			this.copiarAtributosSrv(archivo, tipoArchivo);
		}
		*/
		public void copiarArchivoAtributosSinContenido(File archivo, String tipoArchivo) {
			String resultado="";
			this.setName(archivo.getName());
	        if (tipoArchivo != null){
	        	this.setType(tipoArchivo);
	        }
	        this.setPath(archivo.getPath());
		}
		
		public void copiarArchivoAtributos(File archivo) {
			this.copiarAtributos(archivo, null);
		}
		/*
		public void copiarArchivoAtributosSrv(File archivo) {
			this.copiarAtributosSrv(archivo, null);
		}
		*/
		private void copiarAtributos(File archivo, String tipoArchivo) {
			String resultado="";
			this.setName(archivo.getName());
	        if (tipoArchivo != null){
	        	this.setType(tipoArchivo);
	        }
	        this.setPath(archivo.getPath());
	        byte[] contenido = new byte[(int) archivo.length()];
	        try{
	        	FileInputStream inputStream = new FileInputStream(archivo);
		        inputStream.read(contenido);
		        inputStream.close();

	        	this.setContent(contenido);
	        }catch (IOException e3) {
					// TODO: handle exception
	        	System.out.println("copiarAtributosSrv->" + e3.getMessage());
			}       
		}
		/*
		private void copiarAtributosSrv(File archivo, String tipoArchivo) {
			String resultado="";
			this.setName(archivo.getName());
	        if (tipoArchivo != null){
	        	this.setType(tipoArchivo);
	        }
	        this.setPath(archivo.getPath());
	        byte[] contenido = new byte[(int) archivo.length()];
	        try{
	        	FileInputStream inputStream = new FileInputStream(archivo);
		        inputStream.read(contenido);
		        inputStream.close();

	        	this.setContentSrv(contenido);
	        }catch (IOException e3) {
					// TODO: handle exception
	        	System.out.println("copiarAtributosSrv->" + e3.getMessage());
			}       
		}
		*/
	    public String getName() {
	        return this.name;
	    }

	    public void setName(String name) {
	        this.name = name;
	    }

	    public String getType() {
	        return type;
	    }

	    public void setType(String type) {
	        this.type = type;
	    }
	    
	    public String getPath() {
	        return path;
	    }

	    public void setPath(String path) {
	        this.path = path;
	    }
	    
	    /**
	     * Obtiene contenido desde un archivo temporal
	     */
	    public byte[] getContent() throws IOException {
	        File file = new File(path);
	        byte[] content = new byte[(int) file.length()];
	        FileInputStream inputStream = new FileInputStream(file);
	        inputStream.read(content);
	        inputStream.close();
	        return content;
	    }

	    /**
	     * Almacena contenido en un archivo temporal.
	     * Se utilizan los milisegundos actuales como prefijo "semi-�nico"
	     * para el archivo temporal.
	     */
	    public void setContent(byte[] content) throws IOException {
	    	
	        //File tmpFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), null);
	        File tmpFile = new File("");//user.home
        	File directory = new File("");
    		String os = System.getProperty("os.name");
    		System.out.println("os-> " + os);
    		if (os.startsWith("Windows")) {
    			directory = new File( "\\archivosTxt");
    		} 
    		else if (os.startsWith("Linux")) {
    			directory = new File( System.getProperties().getProperty("user.dir") + "/archivosTxt");
    		} else {
    			System.out.println("Sistema operativo desconocido: " + os);
    		}
    		
            //File tmpFile = new File(System.getProperties().getProperty("java.home"),"datosBancos.tmpvico");//String.valueOf(System.currentTimeMillis()) + ".tmpvico"  );
        	//tmpFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), null, directory);
        	tmpFile = new File( directory ,String.valueOf(System.currentTimeMillis()) + ".txt");
	        //tmpFile = new File(System.getProperties().getProperty("java.home"),"datosBancos.tmpvico");//tring.valueOf(System.currentTimeMillis()) + ".tmpvico" );
	        //tmpFile = new File(System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java", "datosBancos.tmpvico");//tring.valueOf(System.currentTimeMillis()) + ".tmpvico" );
	        //tmpFile = new File(System.getProperties().getProperty("user.home"),"datosBancos.tmpvico");//tring.valueOf(System.currentTimeMillis()) + ".tmpvico" );
	        // Ejecuta correctamente y borra archivos cuando la aplicaci�n se detenga...
	        tmpFile.deleteOnExit();        
	        path = tmpFile.getCanonicalPath();
	        FileOutputStream outputStream = new FileOutputStream(tmpFile);
	        outputStream.write(content);
	        outputStream.close();
	    }

	    /**
	     * Almacena contenido en un archivo temporal.
	     * Se utilizan los milisegundos actuales como prefijo "semi-�nico"
	     * para el archivo temporal.
	     */
	    /*	    
	    public void setContentSrv(byte[] content) throws IOException {
	    	
	        //File tmpFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), null);
	        File tmpFile = new File("");//user.home
        	File directory = new File("");
    		String os = System.getProperty("os.name");
    		//System.out.println("os-> " + os);
    		directory = new File( ParametrosIniciales.RUTA_FILE_TXT );
    		System.out.println("setContentSrv.directory-> " + directory);
    		
    		tmpFile = new File( directory ,String.valueOf(System.currentTimeMillis()) + ".txt");
	        // Ejecuta correctamente y borra archivos cuando la aplicaci�n se detenga...
	        //tmpFile.deleteOnExit();        
	        path = tmpFile.getCanonicalPath();
	        System.out.println("setContentSrv.path-> " + path);
	        FileOutputStream outputStream = new FileOutputStream(tmpFile);
	        outputStream.write(content);
	        outputStream.close();
	    }
	     */	    
	    public long getSize() {
	        return new File(path).length();
	    }

	    public String toString() {
	        return name + " (" + type + ")" + " [" + getSize() / 1024 + " KB]"; 
	    }
	
}
